package com.bookstore.domain;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class ShoppingCart {
	private Map<Integer, ShoppingCartItem> books = new HashMap<>();
	
	/**
	* @Title: addBook
	* @Description: TODO(向购物车中添加商品)
	* @param   
	* @return void  
	* @throws
	* 2017年5月27日
	*/
	public void addBook(Book book) {
		//1. 先检查购物车中有没有该件商品，若有则使其数量 +1；
		//若没有，新创建其对应的ShoppingCartItem，并把其加入到books中
		ShoppingCartItem sCartItem = books.get(book.getId());
		if (sCartItem == null) {
			sCartItem = new ShoppingCartItem(book);
			books.put(book.getId(), sCartItem);
		} else {
			sCartItem.increment();
		}
	}
	
	/**
	* @Title: hasBook
	* @Description: TODO(判断购物车中是否有id指定的商品)
	* @param @param id
	* @param @return  
	* @return boolean  
	* @throws
	* 2017年5月27日
	*/
	public boolean hasBook(Integer id) {
		return books.containsKey(id);
	}
	
	public Map<Integer, ShoppingCartItem> getBooks() {
		return books;
	}
	
	/**
	* @Title: getBookNumber
	* @Description: TODO(返回购物车中商品的总数量)
	* @param @return  
	* @return int 
	* @throws
	* 2017年5月27日
	*/
	public int getBookNumber() {
		int total = 0;
		for (ShoppingCartItem sCartItem : getItems()) {
			total = total + sCartItem.getQuantity();
		}
		return total;
	}
	
	/**
	* @Title: getItems
	* @Description: TODO(获取购物车中所有ShoppingCartItem图书组成的集合)
	* @param @return 
	* @return Collection<Book>  
	* @throws
	* 2017年5月27日
	*/
	public Collection<ShoppingCartItem> getItems() {
		return books.values();
		
	}
	
	/**
	* @Title: getTotalMoney
	* @Description: TODO(获取购物车中所有商品的总金额)
	* @param @return  
	* @return float  
	* @throws
	* 2017年5月27日
	*/
	public float getTotalMoney() {
		float totalMoney = 0;
		for (ShoppingCartItem sCartItem : getItems()) {
			totalMoney = totalMoney + sCartItem.getItemMoney();
		}
		return totalMoney;
	}
	
	/**
	* @Title: isEmpty
	* @Description: TODO(返回购物车是否为空)
	* @param @return 
	* @return boolean  
	* @throws
	* 2017年5月27日
	*/
	public boolean isEmpty() {
		return books.isEmpty();
	}
	
	/**
	* @Title: clear
	* @Description: TODO(清空购物车)
	* @param    
	* @return void  
	* @throws
	* 2017年5月27日
	*/
	public void clear() {
		books.clear();
	}
	
	/**
	* @Title: removeItem
	* @Description: TODO(移除指定的商品)
	* @param  Integer id 
	* @return void   
	* @throws
	* 2017年5月27日
	*/
	public void removeItem(Integer id) {
		books.remove(id);
	}
	
	/**
	* @Title: updateItemQuantity
	* @Description: TODO(修改指定商品的数量)
	* @param @param id
	* @param @param quantity 
	* @return void   
	* @throws
	* 2017年5月27日
	*/
	public void updateItemQuantity(Integer id, int quantity) {
		ShoppingCartItem sCartItem = books.get(id);
		if (sCartItem != null) {
			sCartItem.setQuantity(quantity);
		}
	}
}
